[社内勉強会レポート] 『テスト駆動開発』読書勉強会 #1
はじめに
こんぬづは、最近サーバーサイドやAWSを学んで、自作アプリを構想するときにモバイルアプリだけに閉じない発想が湧いてきている田中です。良い感じがする...!楽しい...!
さて本題です。
この会の趣旨
TDD指南のバイブルと言える 『テスト駆動開発』 の新訳版が、TDDを実践し広めている @t_wada さんの翻訳で再販されました。
最近の興味がちょうど自動テストやTDDに向いていたので、社内で朝に30分ずつ読書勉強会という形で読み進めていくことにしました。せっかくなので、ここで話し合われた内容をブログ化しようというのが、このエントリです。実際に本を読んでいる方がこのエントリを読んで、参考になることがあれば幸いです。
会の目的は以下です。
- TDDのプロセスを学ぶ
- やってみて良さそうなら実務にも導入してみる
- 本に出てくる言葉の意味を共有する
- 本を読んで気になったことを話して共有する
- 写経して思ったことを共有する
それではまとめていきます。
1章 「仮実装」
概要
TDDにおけるレッド・グリーン・リファクタリングの3ステップのうち、レッドからとにかく素早くグリーンへのステップを踏む方法についてまとめられた章。
話し合われた内容
- 日々の実装からすればありえない書き方だが、仮実装はTDD的にはレッドからグリーンに至るための、ステップを踏むための良い書き方であることがわかった
- インターフェースから考える、ゴールから考えるのは、目標がはっきりしていて良い
- 複数人で読書会という形で行うためには、書きながら進めるよりはまとめて読んで、まとめて写経するやりかたの方が合っていそうだということがわかった
2章 「明白な実装」
概要
TDDの実装ステップは、必ずしも仮実装の小さな歩幅から入らなければいけないというわけではなく、実装方法が頭の中で明らかであれば、大きな歩幅で実装を行っても良いと紹介された章。
話し合われた内容
- 1章の仮実装で読んだようなステップを踏むだけでなく、大きな歩幅でテストと実装を行うことが現実的でよかった
- 副作用による問題を確認できた
- 副作用による問題を解決するための設計をテストから導き出した
- 本の中で取り扱っている言語はJavaだが、Swiftなどで扱った場合、そもそもモデルはValueObjectで書くという慣習があるのでこの題材で見られる問題は発生しないように思った
- 言語ごとの特性を語ることが目的ではなく、TDDのプロセスがどういったものか学ぶことが目的なので、この点はスルー
- Java大変そう
3章 「三角測量」
概要
仮実装を行っている関数に対して、一般化を行う必要があることに気づかせてくれる、三角測量という方法が紹介された章。
話し合われた内容
- 2章で扱った副作用の問題が「別名参照問題」という名前だと知った
- ValueObjectを扱うために、Object同士が等価であることを確かめる
equals
を実装する必要が出た - 仮実装を行ったテスト対象に、異なる条件をassertすることで一般化の必要があることに気づけた
- 三角測量の使い所 = 「どうやってリファクタリングしたらいいかわからないとき」という紹介があった
- 具体例を考えてみた: 関数をもっと汎用的に使いたいときに三角測量を使うことでより良い設計を得られるなど?
- Javaにおける
equals
の実装としては良くない例かもしれないという話- 言語ごとの特性を語ることが目的ではなく、TDDのプロセスがどういったものか学ぶことが目的なので、この点はスルー
- ここまでで「仮実装」、「明白な実装」、「三角測量」という、三つのTDDにおける歩幅の調整方法を知った
まとめ
テスト駆動開発というと、「なにか厳かなもの」という印象を抱きがちでしたが、ここで取り扱っている本の内容はTDDを使ってどうやってコードを改善していくのかが一歩一歩紹介されていて、読みやすく入門しやすい印象を受けました。まだ詳しくはないですが、TDDを体現したような章組みの本です。
読書勉強会というものは初めて主催しましたが、一人で読むよりも、多くのシーンについて想定して話し合うことができるのでとても良い試みのように感じています。もし身近に読んでいる人がいれば、解釈について話し合ってみると楽しいかもしれません!
実際に本を読んでいる方がこのエントリを読んで、参考になることがあれば幸いです。